/*--------------------- Program.cs -------------------------*/
/* 12. Desarrollar una clase llamada Conversor, que posea dos 
 * métodos de clase (static) que: 
 * •  Convierta un número de decimal a binario. •  Convierta un número binario a decimal. 
 *  
 * Nota: El número debe ser pasado como parámetro. 
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SC = System.Console;

namespace Ejercicio_12
{
    class Program
    {
        static void Main(string[] args)
        {
            int opcion = 9;
            string varString;
            double varDouble;
            Console.Title = "Ejercicio 12";

            while (opcion != 3){
                SC.Clear();
                SC.Write("        Menu\n" +
                         "--------------------\n" +
                         "1) Decimal a binario\n" +
                         "2) Binario a decimal\n" +
                         "3) Salir\n" +
                         "Seleccione: ");
                opcion = int.Parse(SC.ReadLine());
                switch (opcion){
                    case 1:
                        Console.Write("Ingrese el numero decimal a convertir: ");
                        varDouble = double.Parse(SC.ReadLine());
                        varString = Conversor.ConvertirDecimalABinario(varDouble);
                        SC.Write("El resultado es: {0}", varString);
                        SC.ReadLine();
                        break;
                    case 2:
                        Console.Write("Ingrese el numero binario a convertir: ");
                        varString = SC.ReadLine();
                        varDouble = Conversor.ConvertBinarioADecimal(varString);
                        SC.WriteLine("El resultado es: {0}", varDouble);
                        SC.ReadLine();
                        break;
                    case 3:
                        break;
                    default:
                        SC.WriteLine("No existe opcion");
                        break;
                }
            }
        }
    }
}

/*-------------------- Conversor.cs ------------------------*/
/*class conversor
    //metodos de clase
    // metodo string ConvertirDecimalABinario (double)
    //metodo double ConvertirBinarioADecimal (string)
    utilizar:
        -for foreach
        -class math pow
        -metodos substring y tochararray
        -estructuras while, do while
        -operadores % y /
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ejercicio_12
{
    class Conversor
    {
        public static string ConvertirDecimalABinario (double numero){
            string resultado = "";
            int division;
            
            while (numero / 2 != 1) {
                resultado = (numero % 2) + resultado;
                division = (int) numero / 2;
                numero = division;
                if (numero == 0)
                    break;
                else if (numero == 2)
                    resultado = "10" + resultado;
            }
            if (resultado.Length < 8)
                while (resultado.Length != 8)
                    resultado = "0" + resultado;
            else if (resultado.Length < 16)
                while (resultado.Length != 16)
                    resultado = "0" + resultado;
            else if (resultado.Length < 32)
                while (resultado.Length != 32)
                    resultado = "0" + resultado;            
            return resultado;
        }
        public static double ConvertBinarioADecimal(string binar)
        {
            string binario;
            char[] arraybin = null;
            int i = 0;
            double acum = 0;
            int arraych = 0;
            string num;
            binario = binar.Substring(0, binar.Length);
            arraybin = binario.ToCharArray(0, binario.Length);
            for (i = arraybin.Length; i > 0; i--){
                arraych = 0;
                num = arraybin[i - 1].ToString();
                arraych = int.Parse(num);
                acum = acum + (arraych * Math.Pow(2, arraybin.Length - i));
            }
            return acum;
        }
    }
}

